package mlz.work;

import java.util.Arrays;

/*
## 需求4：数字加密

某系统的数字密码是一个四位数，如1983，为了安全，需要加密后再传输，
加密规则是:对密码中的每位数都加5,再对10求余，
最后将所有数字顺序反转，得到一串加密后的新数，请设计出满足本需求的加密程序!

总结：就是把一个4位数的整数，经过一系列的加密运算，得到一个新的整数

需求分析：
1.方法是否需要接受数据处理？
    需要，方法的参数就是这个需要加密的四位数
2.方法是否需要有返回值？
    需要，返回值就是加密后的数据
3.方法内部的业务处理，也就是进行一系列的加密处理
    1.把4位数的整数进行拆分，4个数组使用数组保存起来
    2.再将数组中的每一个元素加5，再对10取余
    3.最后将数组中的元素反转
 */
public class WorkDemo04 {
    public static void main(String[] args) {
        String s = encrypt(8346);
        System.out.println("加密后的数据:" + s); //8346 1983
    }

    public  static String encrypt(int number){
        //1.把这个获取到的number拆分成一个一个的数字，然后才可以进行加密操作 -> 方法拆分
        int[] numbers = split(number); // numbers = [1,9,8,3]

        //2.遍历数组中的每位数字，对其进行加密操作
        for (int i = 0; i < numbers.length; i++) {
            numbers[i] = (numbers[i] + 5) % 10;
        }
        //可以使用打桩测试查看加密后的数据
        //System.out.println(Arrays.toString(numbers));

        //3.对数组反转，把对数组进行反转操作交给一个独立的方法来完成
        reverse(numbers);

        //定义一个字符号串类型的数据
        String data = "";
        //4.最后将加密后的数据拼接起来作为字符串返回给调用者即可
        for (int i = 0; i < numbers.length; i++) {
           data += numbers[i];
        }
        return data;
    }

    //1.把这个获取到的number拆分成一个一个的数字，然后才可以进行加密操作
    public static int[] split(int number){
        //number = 1 9 8 3 -> 分别存入数组中
        int[] arr = new int[4];//0,0,0,0
        arr[0] = number / 1000; // 1
        arr[1] =(number / 100) % 10; //9
        arr[2] =(number / 10) % 10; //8
        arr[3] = number % 10; //3
        return arr;
    }

    //3.对数组反转，把对数组进行反转操作交给一个独立的方法来完成
    public static void reverse(int[] numbers){
        //数组的反转
        for (int i = 0,j = numbers.length - 1; i < j; i++,j--) {
            //交换 i 和 j 位置上的元素值
            //1.把后一个位置上的元素交给一个临时变量存储
            int temp = numbers[j];
            //2.把前一个位置上的元素交给后一个位置上
            numbers[j] = numbers[i];
            //3.把后一个位置的原来的值赋值给前一个位置
            numbers[i] = temp;
        }
    }





}



















